/**
 * 高精度:保留小数位数  可大数,非E格式
 * @param v string|number 要处理的数字
 * @param n int >=0 最多保留小数位数
 * @param op int 多出位数处理方式
 * 		0:四舍五入, 1:向上取值, -1:向下取值
 * @param pad boolean 小数位数不足n是否补0
 * @return string
 *
 * @return string  参数异常:''
 */
$.bcFix = function(v, n=2, op=0, pad=true){
	const FMT=v=>v.replace(/^0+/,''), SPT=(v,n)=>{
		let [N,D]=v.split('.');  if(!D) D='';
		if(!n) return [N, D.slice(0,1)];
		let s=D.length;  if(s===n) return [N+D,''];
		if(s>n) return [N+D.slice(0,n), D.slice(n,n+1)];
		return [N+D+new Array(n-s+1).join('0'), ''];
	};
	$.bcFix = function (v, n=2, op=0, pad=true){
		v+=''; let [N,D]=SPT(v,n); if(!n && !D) return N;
		let _=v[0]==='-', a=false;  if(_) N=N.slice(1);
		if(D){
			if(op===-1) a=_; else if(op===1) a=!_;
			else a=_?D>5:D>4; if(a) N=$.bcAddOne(N);
		}
		if(!n){ N=FMT(N); return N&&_?'-'+N:(N||'0'); }
		D=N.slice(-n);  N=FMT(N.slice(0,-n))||'0';
		if(!pad) D=D.replace(/0+$/,''); v=N+(D?'.'+D:'');
		return !_ || /^0(\.0+)?$/.test(v) ? v : '-'+v;
	};
	return $.bcFix(v, n, op, pad);
};
